Skip to content

fix(langs): declare all language packages as explicit dependencies#760

Merged
jaywcjlove merged 2 commits intouiwjs:masterfrom
EurFelux:fix/langs-explicit-dependencies
Mar 2, 2026
Merged

fix(langs): declare all language packages as explicit dependencies#760
jaywcjlove merged 2 commits intouiwjs:masterfrom
EurFelux:fix/langs-explicit-dependencies

Conversation

@EurFelux
Copy link
Contributor

@EurFelux EurFelux commented Mar 2, 2026

Summary

  • gen-langs-map.cjs now auto-syncs package.json dependencies after generating src/index.ts, ensuring every imported package is explicitly declared
  • Moved @codemirror/language-data from dependencies to devDependencies and pinned to 6.5.2 (only used as gen script input, not at runtime)
  • Removed @codemirror/language-data from peerDependencies

Problem

The generated src/index.ts imports from 20+ @codemirror/lang-* and @codemirror/legacy-modes packages that were never declared in package.json. They only worked as phantom dependencies hoisted from @codemirror/language-data, which breaks under pnpm strict mode.

Fixes #754
Fixes #759

Note on src/index.ts diff

The regenerated src/index.ts includes minor content changes (e.g. jinja upgraded from legacy mode to @codemirror/lang-jinja, new xq/xqm/xqy extensions added) because the repo has no lockfile — npm install resolved @codemirror/language-data@6.5.2 while the previously committed output was generated from 6.5.1. This version has now been pinned to 6.5.2 in devDependencies to prevent future drift.

Test plan

  • Run npm run gen in extensions/langs/ and verify package.json dependencies are auto-updated
  • Verify all imports in src/index.ts have corresponding entries in package.json
  • Test with pnpm install --strict-peer-dependencies to confirm no phantom dependency issues

🤖 Generated with Claude Code

EurFelux and others added 2 commits March 2, 2026 17:54
The generated src/index.ts imports from 20+ @codemirror/lang-* and
@codemirror/legacy-modes packages that were never declared in
package.json. They only worked as phantom dependencies hoisted from
@codemirror/language-data, which breaks under pnpm strict mode.

- Enhance gen-langs-map.cjs to auto-sync package.json dependencies
  after generating the TypeScript file
- Move @codemirror/language-data to devDependencies (only needed
  as input for the gen script, not at runtime)
- Remove @codemirror/language-data from peerDependencies

Fixes uiwjs#759

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@jaywcjlove jaywcjlove merged commit dddf539 into uiwjs:master Mar 2, 2026
1 check passed
github-actions bot pushed a commit that referenced this pull request Mar 2, 2026
…ncies (#760)

* fix(langs): declare all language packages as explicit dependencies

The generated src/index.ts imports from 20+ @codemirror/lang-* and
@codemirror/legacy-modes packages that were never declared in
package.json. They only worked as phantom dependencies hoisted from
@codemirror/language-data, which breaks under pnpm strict mode.

- Enhance gen-langs-map.cjs to auto-sync package.json dependencies
  after generating the TypeScript file
- Move @codemirror/language-data to devDependencies (only needed
  as input for the gen script, not at runtime)
- Remove @codemirror/language-data from peerDependencies

Fixes #759

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* chore(langs): pin @codemirror/language-data to 6.5.2

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> dddf539
jaywcjlove added a commit that referenced this pull request Mar 2, 2026
github-actions bot pushed a commit that referenced this pull request Mar 2, 2026
GeorgeDong32 pushed a commit to CherryHQ/cherry-studio that referenced this pull request Mar 3, 2026
### What this PR does

Before this PR:
`@uiw/codemirror-extensions-langs`, `@uiw/codemirror-themes-all`, and
`@uiw/react-codemirror` were pinned at version 4.25.1 to work around a
phantom dependency issue.

After this PR:
- All three `@uiw/codemirror-*` packages are upgraded to 4.25.7 with
exact version pinning (no `^` prefix). The phantom dependency issue has
been resolved upstream, making this upgrade safe.
- Added `@codemirror/state` to `pnpm.overrides` to resolve version
duplication, and updated the overrides for `@codemirror/view`,
`@codemirror/language`, and `@codemirror/lint` to their latest versions.

Fixes #12829

### Why we need it and why it was done in this way

The following tradeoffs were made:
- Exact version pinning (removing `^`) is used to prevent unexpected
automatic upgrades that could reintroduce dependency issues.
- `pnpm.overrides` is used to enforce a single version of each
`@codemirror/*` core package across the entire dependency tree. Without
this, multiple versions coexist due to different sub-dependencies
resolving independently, which causes TypeScript errors because
CodeMirror uses private class properties for nominal typing.
- After the update, `@codemirror/state` has multiple dependency versions
(6.5.3 and 6.5.4 coexisting), which declare different types for the same
type name, causing TypeScript errors. Therefore, an override was added
for this dependency.

The following alternatives were considered:
- Using `^4.25.7` (range specifier) was considered but rejected in favor
of exact pinning for more predictable dependency resolution.
- Considered removing the override, but dependency analysis is difficult
to handle because the previous override has already left a fixed version
in the lock file. Deleting the lock file and regenerating it would cause
extensive changes.

Links to places where the discussion took place:
- #12829 — original issue that pinned versions to 4.25.1
- #13133 — also referenced the phantom dependency problem
- uiwjs/react-codemirror#760

### Breaking changes

None.

### Special notes for your reviewer

The `@codemirror/*` override versions are updated as follows:

| Package | Old | New |
|---|---|---|
| `@codemirror/state` | _(none)_ | 6.5.4 |
| `@codemirror/view` | 6.38.1 | 6.39.16 |
| `@codemirror/language` | 6.11.3 | 6.12.2 |
| `@codemirror/lint` | 6.8.5 | 6.9.5 |

### Checklist

- [x] PR: The PR description is expressive enough and will help future
contributors
- [x] Code: [Write code that humans can
understand](https://en.wikiquote.org/wiki/Martin_Fowler#code-for-humans)
and [Keep it simple](https://en.wikipedia.org/wiki/KISS_principle)
- [x] Refactor: You have [left the code cleaner than you found it (Boy
Scout
Rule)](https://learning.oreilly.com/library/view/97-things-every/9780596809515/ch08.html)
- [x] Upgrade: Impact of this change on upgrade flows was considered and
addressed if required
- [ ] Documentation: A [user-guide update](https://docs.cherry-ai.com)
was considered and is present (link) or not required. Check this only
when the PR introduces or changes a user-facing feature or behavior.
- [ ] Self-review: I have reviewed my own code (e.g., via
[`/gh-pr-review`](/.claude/skills/gh-pr-review/SKILL.md), `gh pr diff`,
or GitHub UI) before requesting review from others

### Release note

```release-note
NONE
```
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Too many phantom dependencies in @uiw/codemirror-extensions-langs lang extension missing peer deps

2 participants